#pragma once
#include "Item.hh"
#include <string>
#include <vector>

using namespace std;

class ICharacter {
public:
    // Virtual destructor for proper cleanup in derived classes
    virtual ~ICharacter() = default;

    // Required methods
    virtual bool isAlive() const = 0;
    virtual bool takeDamage(unsigned damage) = 0;
    virtual bool attack(ICharacter& target) = 0;

    // Getters
    virtual string getName() const = 0;
    virtual string getDescription() const = 0;
    virtual unsigned getHealth() const = 0;
    virtual unsigned getAttack() const = 0;
    virtual unsigned getDefense() const = 0;
    virtual string toString() const = 0;

    // Inventory management
    virtual void addToInventory(Item* item) = 0;
    virtual void displayInventory() const = 0;

    // Display
    virtual void display() const = 0;
};